This specification relates to static analysis of computer software source code.
Static analysis refers to techniques for analyzing computer software source code without executing the source code as a computer software program.
Source code is typically maintained by developers in a code base, which may be referred to as a project. Developers can maintain the source code of the project using a version control system. Version control systems generally maintain multiple revisions of the source code in the code base, each revision being referred to as a snapshot. Each snapshot includes the source code of files of the code base as the files existed at a particular point in time.
Cyclic dependencies are a common problem in large code bases. A cyclic dependency occurs, for example, when a first software package depends on a second software package, the second software package depends on a third software package, and the third software package depends on the first software package. Cyclic dependencies make code bases harder to maintain because a change to any one software package in the cycle can require changes to each and every other software package in the cycle.
Dependencies in source code can be represented as a directed graph. However, as code bases become larger and larger, visualizations of the raw dependencies between source code elements, which can number many millions in large code bases, tend to be less useful.